Package com.appspot.gaeforum309.web

Source Code of com.appspot.gaeforum309.web.TemplatePunBB

package com.appspot.gaeforum309.web;

import java.util.List;

import com.appspot.gaeforum309.core.ForumAPI;
import com.appspot.gaeforum309.db.DBCategory;
import com.appspot.gaeforum309.db.DBComment;
import com.appspot.gaeforum309.db.DBConversation;
import com.appspot.gaeforum309.db.DBTopic;
import com.appspot.gaeforum309.db.DBUser;
import com.appspot.gaeforum309.pathing.Action;
import com.appspot.gaeforum309.pathing.Path;
import com.google.appengine.labs.repackaged.com.google.common.collect.Lists;
import com.appspot.gaeforum309.pathing.PathBuilder.IPathable;
import com.appspot.gaeforum309.web.ForumPages.Page;
import com.appspot.gaeforum309.web.ForumPages.PageInfo;

public class TemplatePunBB extends Template {
 
  public static void writeActionAsForm(Action action, StringBuilder response)
  {
    response.append("<div><form action='/forumAction' method='POST'>");
    for(Action.Field field: action.getFieldsList())
    {
      switch(field.type)
      {
      case hidden:
        response.append("<p><input type='hidden' name='"+ field.name +"' value='"+ field.defaultValue +"'/></p>");
        break;
      case integer:
        response.append("<p><input type='text' name='"+ field.name +"' value='"+ field.defaultValue +"'/></p>");
        break;
      case longtext:
        response.append("<p><textarea cols=\"155\" rows=\"10\" name='"+ field.name +"'>"+ field.defaultValue +"</textarea></p>");
        break;
      case text:
        response.append("<p><input type='text' name='"+ field.name +"' value='"+ field.defaultValue +"'/></p>");
        break;
      default:
        break;
      }
    }
    response.append("<p><input type='submit' /></p></form></div>");
  }

  @Override
  public void initTemplate(PageInfo pageInfo) {
    addSection(DBCategory.tagName, new Template.ITemplateSection() {

      @Override
      public void head(StringBuilder response, Path path, IPathable object) {
        DBCategory category = (DBCategory)object;
       
        response.append("<div id=\"forum71\" class=\"main-head\"><h2 class=\"hn\"><span><a href='"+ Page.getUrl(category) +"'>"+ category.getTitre() +"</a></span></h2></div>");
        response.append("<div class=\"main-subhead\">" +
            "<p class=\"item-summary\"><span><strong class=\"subject-title\">Forum</strong> in this category with details of <strong class=\"info-topics\">Conversation</strong>, <strong class=\"info-posts\">Last</strong>, <strong class=\"info-lastpost\">Date</strong></span></p>" +
            "</div>" +
            "<div id=\"category1\" class=\"main-content main-category\">");
      }

      @Override
      public void foot(StringBuilder response, Path path, IPathable object) {
        response.append("</div>");

      }

      @Override
      public void body(StringBuilder response, Path path, IPathable object) {
        // TODO Auto-generated method stub

      }
    });
    addSection(DBTopic.tagName, new Template.ITemplateSection() {

      @Override
      public void head(StringBuilder response, Path path, IPathable object) {
        DBTopic topic = (DBTopic) object;
        // Affichage des pages
        /*
        response.append("<div " +
            "id=\"brd-pagepost-top\" class=\"main-pagepost gen-content\">"+
            "<p class=\"paging\"><span class=\"pages\">Pages</span> <strong class=\"first-item\">1</strong> <a href=\"http://punbb.informer.com/forums/forum/48/news/page/2/\">2</a> <a href=\"http://punbb.informer.com/forums/forum/48/news/page/3/\">3</a> <a href=\"http://punbb.informer.com/forums/forum/48/news/page/4/\">4</a> <a href=\"http://punbb.informer.com/forums/forum/48/news/page/2/\">Next</a></p>"+
            "<p class=\"posting\">You must <a href=\"http://punbb.informer.com/forums/login/\">login</a> or <a href=\"http://punbb.informer.com/forums/register/\">register</a> to post a new topic</p>"+
            "</div>"
            );
            */
       
       
        // TODO: Remplacer getChilds().size() par mieux
        // TODO: Paging doit influer les valeurs affichées
        response.append("<div class=\"main-head\">"+
            "<p class=\"options\"><span class=\"feed first-item\"><a class=\"feed\" href=\"/\">RSS forum feed</a></span></p>"+
            "<h2 class=\"hn\"><span><span class=\"item-info\">Topics: 1 to "+ topic.getChilds().size() +" of "+ topic.getChilds().size() +"</span></span></h2>"+
            "</div>");
       
        response.append("<div class=\"main-subhead\">" +
            "<p class=\"item-summary forum-views\"><span><strong class=\"subject-title\">Topics</strong> in this forum with details of <strong class=\"info-replies\">replies</strong>, <strong class=\"info-views\">views</strong>, <strong class=\"info-lastpost\">last post</strong>.</span></p>" +
            "</div>");
       
        response.append("<div id=\"forum48\" class=\"main-content main-forum forum-views\">");
      }

      @Override
      public void foot(StringBuilder response, Path path, IPathable object) {
        response.append("</div>");
       
        if(Action.actionAuthorized(object, Action.ActionType.createChild))
        {
          Action action = Action.buildAction(object, Action.ActionType.createChild);
         
          TemplatePunBB.writeActionAsForm(action, response);
        }
      }

      // TODO: Add a method on IPathable to count childs objects instead of getChilds().size()
      @Override
      public void body(StringBuilder response, Path path, IPathable object) {
        DBTopic topic = (DBTopic)object;
       
        response.append("<div id=\"forum48\" class=\"main-item odd main-first-item\">" +
            "<span class=\"icon \"><!-- --></span>" +
            "<div class=\"item-subject\">" +
            "<h3 class=\"hn\"><a href=\""+ ForumPages.Page.getUrl(topic) +"\"><span>"+ topic.getTitle() +"</span></a></h3>" +
            "<p>"+topic.getDescription()+"</p>" +
            "</div>" +
            "<ul class=\"item-info\">" +
            "<li class=\"info-topics\"><strong>"+ topic.getChilds().size() +"</strong> <span class=\"label\">topics</span></li>"+
            "<li class=\"info-posts\"><strong>X</strong> <span class=\"label\">posts</span></li>" +
            "<li class=\"info-lastpost\"><span class=\"label\">Last post:</span> <strong><a href=\"http://punbb.informer.com/forums/post/145563/#p145563\">2012-06-28 07:06</a></strong> <cite>by CReatiVe4w3</cite></li>" +
            "</ul>" +
            "</div>");
      }
    });
    addSection(DBConversation.tagName, new Template.ITemplateSection() {

      @Override
      public void head(StringBuilder response, Path path, IPathable object) {
        DBConversation conversation = (DBConversation) object;
       
        // TODO: Ajouter paging
        response.append("<div id=\"brd-pagepost-top\" class=\"main-pagepost gen-content\">"+
            "<p class=\"paging\"><span class=\"pages\">Pages</span> <strong class=\"first-item\">1</strong></p>"+
            "<p class=\"posting\">You must <a href=\"http://punbb.informer.com/forums/login/\">login</a> or <a href=\"http://punbb.informer.com/forums/register/\">register</a> to post a reply</p>"+
            "</div>");
       
        response.append("<div class=\"main-head\">"+
            "<p class=\"options\"><span class=\"feed first-item\"><a class=\"feed\" href=\"/\">RSS topic feed</a></span></p>"+
            "<h2 class=\"hn\"><span><span class=\"item-info\">Posts: "+ conversation.getChilds().size() +"</span></span></h2>"+
            "</div>");
       
        response.append("<div id=\"forum68\" class=\"main-content main-topic\">");
       
      }

      @Override
      public void foot(StringBuilder response, Path path, IPathable object) {
        response.append("</div>");
       
        if(Action.actionAuthorized(object, Action.ActionType.createChild))
        {
          Action action = Action.buildAction(object, Action.ActionType.createChild);
         
          TemplatePunBB.writeActionAsForm(action, response);
        }
      }

      @Override
      public void body(StringBuilder response, Path path, IPathable object) {
        DBConversation conversation = (DBConversation) object;
        @SuppressWarnings("unchecked")
        List<DBComment> lcomments = (List<DBComment>) conversation.getChilds(0, 1);
        String author="";
       
       
        if(lcomments.size() > 0)
        {
          DBComment c = lcomments.get(0);
          DBUser a = c.getAuthor();
          author=a.getEmail();
        }
       
        // TODO: Counter of view in DBConversation
        // TODO: Search last post
        // TODO: Replace all id by real GAEForum id, or remove it !
        // TODO: Add the "em closed" only if topic is closed
        // TODO: Add a possibility to close a topic
        response.append("<div id=\"topic24927\" class=\"main-item odd main-first-item sticky closed\">"+
            "<span class=\"icon sticky closed\"><!-- --></span>"+
            "<div class=\"item-subject\">"+
            "<h3 class=\"hn\"><span class=\"item-num\">1</span> <span class=\"item-status\"><em class=\"closed\">Closed</em>:</span> <a href=\""+ Page.getUrl(conversation) +"\">"+ conversation.getTitle() +"</a></h3>"+
            "<p><span class=\"item-starter\">by <cite>"+ author  +"</cite></span> <span class=\"item-nav\">( <span>Pages&nbsp;</span><a class=\"first-item\" href=\""+ Page.getUrl(conversation) +"\">1</a>&nbsp;<a href=\""+ Page.getUrl(conversation) +"\">2</a> )</span></p>"+
            "</div>" +
            "<ul class=\"item-info\">" +
            "<li class=\"info-replies\"><strong>"+ conversation.getChilds().size() +"</strong> <span class=\"label\">replies</span></li>"+
            "<li class=\"info-views\"><strong>X</strong> <span class=\"label\">views</span></li>"+
            "<li class=\"info-lastpost\"><span class=\"label\">Last post</span> <strong><a href=\"/\">X</a></strong> <cite>by X</cite></li>"+
            "</ul>"+
            "</div>");
      }
    });
    addSection(DBComment.tagName, new Template.ITemplateSection() {

      @Override
      public void head(StringBuilder response, Path path, IPathable object) {
       
      }

      @Override
      public void foot(StringBuilder response, Path path, IPathable object) {

      }

      @Override
      public void body(StringBuilder response, Path path, IPathable object) {
        DBComment comment = (DBComment) object;
        DBUser author = comment.getAuthor();
        DBConversation conversation = (DBConversation) path.getObjectByTagName(DBConversation.tagName);
       
        // TODO: ajouter firstpost, lastpost, ou rien, pour la class du premier div
        // TODO: Add a class of user (Admin, and personalized class ?)
        // TODO: User can be online or not.
        // TODO: Determiner le nombre de posts d'un author
        // TODO: Ajouter une methode de formatage des messages(directement HTML ? ATTENTION au risque d'injection de JavaScript)
        // TODO: Add a signature on comments, and on profile.
        response.append("<div class=\"post odd topicpost\">"+
            "<div id=\"p146029\" class=\"posthead\">"+
            "<h3 class=\"hn post-ident\"><span class=\"post-num\">1</span> <span class=\"post-byline\"><span>Topic by </span><em class=\"group_color_7\"><a title=\"Go to "+ author.getEmail() +"'s profile\" href=\"/\">"+ author.getEmail() +"</a></em></span> <span class=\"post-link\"><a class=\"permalink\" rel=\"bookmark\" title=\"Permanent link to this post\" href=\""+ Page.getUrl(comment) +"\">"+ comment.getDateDiscription().toLocaleString() +"</a></span></h3>"+
            "</div>"+
            "<div class=\"postbody\">"+
            "<div class=\"post-author\">"+
            "<ul class=\"author-ident\">"+
            "<li class=\"username\"><a title=\"Go to "+ author.getEmail() +"'s profile\" href=\"/\">"+ author.getEmail() +"</a></li>"+
            "<li class=\"usertitle\"><span>Standard user</span></li>"+
            "<li class=\"userstatus\"><span>Offline</span></li>"+
            "</ul>"+
            "<ul class=\"author-info\">"+
            "<li><span>Registered: <strong>"+ author.getDateInscription() +"</strong></span></li>"+
            "<li><span>Posts: <strong>X</strong></span></li>"+
            "</ul>"+
            "</div>"+
            "<div class=\"post-entry\">"+
            "<h4 id=\"pc146029\" class=\"entry-title hn\">"+ conversation.getTitle()  +"</h4>"+
            "<div class=\"entry-content\">"+
            "<p>"+ comment.getTextComment() +"</p>"+
            "<div class=\"sig-content\"><span class=\"sig-line\"><!-- --></span>Not implemented yes</div>"+
            "</div>"+
            "</div>"+
            "</div>"+
            "</div>");
      }
    });

  }

  @Override
  public String contentType() {
    return "Text/html";
  }

  @Override
  public void beginPage(StringBuilder response, Path path) {
    response.append("<html><head><meta charset=\"utf-8\" />");
    response.append("<title>"+ ForumAPI.Config.getForumName() +"</title>");
    response.append("<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/themes/PunBB/Oxygen.min.css\" />");
    response.append("<style>.group_color_1 a:link, .group_color_1 { color: #DD4B39 !important; }\n" +
        ".group_color_1 a:visited { color: #DD4B39; }\n" +
        ".group_color_1 a:hover { color: #C12E1C; }\n" +
        ".group_color_1 { color: #C12E1C; }\n" +
        "\n" +
        ".group_color_4 a:link, .group_color_4 { color: #800000 !important; }\n" +
        ".group_color_4 a:visited { color: #800000; }\n" +
        ".group_color_4 a:hover { color: #FF6666; }\n" +
        ".group_color_4 { color: #FF6666; }\n" +
        "\n" +
        ".group_color_7 a:link, .group_color_7 { color: #B42000 !important; }\n" +
        ".group_color_7 a:visited { color: #B42000; }\n" +
        ".group_color_7 a:hover { color: #005900; }\n" +
        ".group_color_7 { color: #005900; }\n" +
        "\n" +
        ".group_color_8 a:link, .group_color_8 { color: #006633 !important; }\n" +
        ".group_color_8 a:visited { color: #006633; }\n" +
        ".group_color_8 a:hover { color: #000033; }\n" +
        ".group_color_8 { color: #000033; }\n" +
        "\n" +
        ".group_color_10 a:link, .group_color_10 { color: #4B088A !important; }\n" +
        ".group_color_10 a:visited { color: #4B088A; }\n" +
        ".group_color_10 a:hover { color: #307D7E; }\n" +
        ".group_color_10 { color: #307D7E; }\n" +
        "\n" +
        ".group_color_12 a:link, .group_color_12 { color: #c0c0c0 !important; }\n" +
        ".group_color_12 a:visited { color: #c0c0c0; }\n" +
        ".group_color_12 a:hover { color: #ff0000; }\n" +
        ".group_color_12 { color: #ff0000; }</style>\n" +
        "<style>#topcontrol{font-size:.8em;padding:.4em .5em .5em;border-radius:.3em;color:#cb4b16;font-weight:bold;cursor:pointer;z-index:10;background:#e6eaf6;background:-moz-linear-gradient(center top,#f5f7fd,#e6eaf6) repeat scroll 0 0 transparent;background:-o-linear-gradient(top,#f5f7fd,#e6eaf6);background:-webkit-gradient(linear,0 0,0 100%,from(#f5f7fd),to(#e6eaf6));background:-webkit-linear-gradient(top,#f5f7fd,#e6eaf6);background:-ms-linear-gradient(top,#f5f7fd,#e6eaf6);background:linear-gradient(top,#f5f7fd,#e6eaf6);text-shadow:0 1px 1px #bbb;-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}#topcontrol:hover{color:#db4c18;-moz-transform:scaley(1.15);-webkit-transform:scaley(1.15)}</style>\n");

    response.append("</head><body>");
    response.append("<div class=\"hr\"><hr /></div><div id=\"brd-main\">");
    // TODO: Add a description field on the config
    response.append("<div id=\"brd-wrap\" class=\"brd\">" +
        "<div id=\"brd-index\" class=\"brd-page basic-page\">" +
        "<div id=\"brd-head\" class=\"gen-content\">" +
        "<p id=\"brd-access\"><a href=\"#brd-main\">Skip to forum content</a></p>" +
        "<p id=\"brd-title\"><a href=\"/\">"+ForumAPI.Config.getForumName()+"</a></p>" +
        "<p id=\"brd-desc\">This template is a port of the default PunBB template. Thank to the PunBB project.</p>" +
        "</div>");
    response.append("<h1 class=\"main-title\">"+ ForumAPI.Config.getForumName() +"</h1>");
   
    response.append("<div id=\"brd-visit\" class=\"gen-content\"><p id=\"welcome\">");
    if(!ForumAPI.loggedUser())
    {
      response.append("<span>You are not logged in.</span> <span>Please <a href='"+ ForumAPI.userLoginLogoutUrl(Page.getUrl(path.object())) +"'>login</a> with your Google Account.</span></p>");
      //response.append("<p id=\"visit-links\" class=\"options\"><span id=\"visit-recent\" class=\"first-item\"><a href=\"http://punbb.informer.com/forums/search/recent/\" title=\"Find topics which contain recent posts.\">Active topics</a></span> <span id=\"visit-unanswered\"><a href=\"http://punbb.informer.com/forums/search/unanswered/\" title=\"Find topics which have not been replied to.\">Unanswered topics</a></span>");
    }
    else
    {
      DBUser user = ForumAPI.userLogin();
     
      response.append("<p><span>Welcome "+ user.getEmail() +". </span>");
      if(user.isFirstLogin())
      {
        // TODO: Add an API to get first login form URI.
        response.append("<span>This is your first login, please fill our <a href='/firstLogin'>first login form</a>. </span>");
      }
     
      response.append("<span>You can <a href='"+ ForumAPI.userLoginLogoutUrl(Page.getUrl(path.object())) +"'>logout</a></span></p>");
    }
    response.append("</p></div>");
   
    response.append("<div id=\"brd-crumbs-top\" class=\"crumbs\"><p>");
 
    boolean isFirst = true;
    for(IPathable ip: Lists.reverse(path.getPath()))
    {
      boolean isLast = (path.object() == ip);
     
      response.append("<span class=\"crumb"+ (isLast?" crumblast":"") + (isFirst?" crumbfirst":"") +"\">"+ (!isFirst?"<span> -> </span>":"") + "<a href=\""+ Page.getUrl(ip) +"\">"+ ip.label() +"</a></span>");
      isFirst = false;
    }
   
    response.append("</div>");
  }

  @Override
  public void endPage(StringBuilder response, Path path) {
    response.append("</div></body></html>");
   
  }
}
TOP

Related Classes of com.appspot.gaeforum309.web.TemplatePunBB

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.